home *** CD-ROM | disk | FTP | other *** search
/ Varios Español / Varios Español.iso / DBASE5 / SAMPLES.ZIP / INF_EMP.PRG < prev    next >
Text File  |  1994-10-12  |  8KB  |  264 lines

  1.  
  2. *****************************************************************************
  3. * NOMBRE DEL PROGRAMA:         INF_EMP.PRG
  4. *                              EJEMPLO DE INFORME PERSONALIZADO - EMPLEADOS
  5. *                              PROGRAMA EJEMPLO DE APLICACION DE GESTION
  6. * ULTIMO CAMBIO:               24/02/93 04:00 PM
  7. * ESCRITO POR:                 BORLAND
  8. *****************************************************************************
  9. *            FICHEROS USADOS:
  10. *            Fichero de base de datos = Empleado.dbf
  11. *            Fichero de índice        = Empleado.mdx
  12. *              ETIQUETA: Depto  (depart+apellido+nombre+inicial)
  13. *****************************************************************************
  14. SET ORDER TO Dept
  15. GO TOP
  16.  
  17. ON ESCAPE print_flag = .F.   && Si se pulsa Esc durante la impresión, se abandona
  18.  
  19. * Definir entorno
  20. SET CENTURY ON
  21.  
  22. * Inicializar variables
  23. rpt_level   =  1               && Nivel de informe para comenzar el proceso
  24. print_flag  = .T.              && Señal para continuar impresión
  25. on_pg_line  =  0               && Línea donde funciona ON PAGE
  26. STORE 0 TO pageno, Salario_sum, Salario_gt, number_emp, yrsexp_sum, yrsexp_avg
  27. group_brk = ""
  28. p_Grado = "Informe de recursor humanos"
  29.  
  30. * Almacenar número de línea para salto de página
  31. on_pg_line = _plength - 5      && Altura de página menos márgenes inferior y superior
  32.  
  33. * Almacenar actuales características del entorno
  34. mplength  = _plength
  35. mploffset = _ploffset
  36. mlmargin  = _lmargin
  37. mrmargin  = _rmargin
  38. mppitch   = _ppitch
  39. mwrap     = _wrap
  40. mpeject   = _peject
  41.  
  42. * Establecer características del informe
  43. *_plength  = 66
  44. _ploffset = 0
  45. _lmargin  = 0
  46. _rmargin  = 80
  47. _ppitch   = "PICA"
  48. _plineno  =  1
  49. _wrap     = .F.
  50. _peject   = "AFTER"
  51.  
  52. * Definir número de línea donde se ejecuta el procedimiento de salto de página
  53. ON PAGE AT LINE on_pg_line DO Pg_break
  54.  
  55. SET PRINTER ON
  56. *============================ Comenzar Impresión ============================
  57. PRINTJOB
  58.    * Imprimir cabecera de página
  59.    DO Grado
  60.    DO Pg_head
  61.    DO Brk_head
  62.    GO TOP
  63.    * Seleccionar-procesar registros en el orden del índice hasta el fin de fichero
  64.    * o hasta que se pulse Esc (print_flag = .F.)
  65.    SCAN WHILE print_flag
  66.       IF group_brk <> Depart
  67.          * Cambia el departamento, reiniciar informe
  68.          rpt_level = 1
  69.          DO Brk_data
  70.          DO Reinit
  71.          DO Brk_head
  72.       ELSE
  73.          * Departamento no cambia
  74.          rpt_level = 0
  75.       ENDIF
  76.       * Imprimir líneas de detalle
  77.       DO Detail
  78.       * Realizar cálculos resumen
  79.       DO Det_calc
  80.    ENDSCAN
  81.    *
  82.    IF print_flag
  83.       DO Brk_data     && Fin de fichero, no se pulsó Esc para abandonar la impresión
  84.    ENDIF
  85.    * Final del informe
  86.    DO Rpt_end
  87.    ON PAGE AT LINE on_pg_line DO Pg_foot
  88.    EJECT PAGE
  89. ENDPRINTJOB
  90. *================================ Fin de Impresión ==============================
  91.  
  92. * Restaurar entorno
  93. _ppitch   = mppitch
  94. _wrap     = mwrap
  95. _peject   = mpeject
  96. _plength  = mplength
  97. _ploffset = mploffset
  98. _lmargin  = mlmargin
  99. _rmargin  = mrmargin
  100.  
  101. SET PRINTER OFF
  102. ON ESCAPE
  103. ON PAGE
  104. SET CENTURY OFF
  105. SET ORDER TO TAG Nombres
  106. RETURN
  107.  
  108. ****************** FIN DEL PROCEDIMIENTO DE IMPRESION PRINCIPAL ***********************
  109.  
  110. * PROCEDIMIENTOS DE UTILIDADES
  111.  
  112. PROCEDURE Brk_data
  113.    * Imprimir los datos calculados del departamento terminado
  114.    ?
  115.    ?? "SUMARIO:"   STYLE "B" AT 0
  116.    ?? number_emp   PICTURE "999"
  117.    ?? "TOTAL:"     STYLE "B" AT 36
  118.    ?? "  ₧" AT 44
  119.    ?? Salario_sum   PICTURE "99,999,999"
  120.    ?? " "
  121.    ?? "MED:"       STYLE "B" AT 59
  122.    ??  yrsexp_avg  PICTURE "99.9"
  123.    ?? " años"
  124.    ? "MED:"        STYLE "B" AT 36
  125.    ?? "  ₧" AT 44
  126.    ?? ROUND(Salario_sum/number_emp,2)  PICTURE "99,999,999"
  127.    ?
  128.    * Acumular el total de los salarios                                                              Salario totals
  129.    Salario_gt  = Salario_gt + Salario_sum
  130.    * EJECT PAGE    && Quitar * si se quiere cada grupo en una página
  131. RETURN
  132.  
  133. PROCEDURE Brk_head
  134.    * Actualizar la variable de cambio e imprimir la cabecera del departamento
  135.    group_brk = Depart
  136.    * Comprueba si la línea actual está próxima a la localización del pie de página (ON PAGE)
  137.    IF  _plineno + 8 > on_pg_line
  138.       EJECT PAGE        && Comenzar nueva página si está demasiado próxima
  139.    ELSE
  140.       ?
  141.       ? "Departamento" STYLE "BU" AT 0 ,": " STYLE "B"
  142.       ?? Depart  PICTURE "@T XXXXXXXXXXXXXXX"
  143.       IF rpt_level = 0
  144.          ?? " (Continúa)" && Imprimir mensaje de continuación si el grupo ;
  145.                           && de la página anterior continúa 
  146.       ENDIF
  147.       ?
  148.       rpt_level = 0     && Restaurar nivel después de imprimir cabecera del
  149.                         && departamento
  150.    ENDIF
  151. RETURN
  152.  
  153. PROCEDURE Det_calc
  154.    * Calcular sumas y medias para impresión del departamento
  155.    number_emp = number_emp + 1                 && Número de empleado
  156.    Salario_sum = Salario_sum + Salario         && Suma de salarios
  157.    yrsexp_sum = yrsexp_sum + Expcia            && Suma de los años de experiencia
  158.    yrsexp_avg = ROUND(yrsexp_sum/number_emp,1) && Media de los años de experiencia
  159. RETURN
  160.  
  161. PROCEDURE Detail
  162.    * Imprimir detalle del informe
  163.    * Comprueba si la línea actual está próxima a la localización del pie de página (ON PAGE)
  164.    IF _plineno + 5 > on_pg_line
  165.       * Comenzar nueva página si está demasiado próxima
  166.       EJECT PAGE
  167.    ENDIF
  168.    ?
  169.    ?? Apellido PICTURE "@T XXXXXXXXXXXXXXX" AT 0
  170.    ?? ", "
  171.    ?? Nombre   PICTURE "XXXXXXXXXX"
  172.    ?? Grado    PICTURE "XXXXXXXXXXXXXXX"    AT 30
  173.    ?? "  ₧"
  174.    ?? Salario  PICTURE "9,999,999"          AT 48
  175.    ?? Expcia   PICTURE "99.9"               AT 63
  176.    ?? Título   PICTURE "XXX"                AT 73
  177.    ?  Cód_emp     AT 0
  178.    ?? Especiali   AT 30
  179.    IF Porcentaje <> 0
  180.       * Imprimir tanto por ciento sólo si no es cero
  181.       ?? Porcentaje   PICTURE "99.9" AT 48
  182.       ?? " %"
  183.    ENDIF
  184.    ?
  185. RETURN
  186.  
  187. PROCEDURE Pg_break
  188.    * Salto de página lógico si la línea del informe = on_pg_line
  189.    DO Pg_foot
  190.    IF _pageno >= _pepage   && Parar en la página terminada
  191.       GO BOTTOM
  192.       SKIP
  193.       rpt_level = 0
  194.       RETURN
  195.    ENDIF
  196.    * Imprimir cabecera de página títulos
  197.    DO Pg_head
  198.    DO Brk_head
  199. RETURN
  200.  
  201. PROCEDURE Pg_foot
  202.    * Imprimir pie de página
  203.    pageno = "-" + LTRIM(STR(_pageno,3,0)) + "-"
  204.    _wrap = .T.
  205.    _alignment = "CENTER"
  206.    ?
  207.    ?
  208.    ? pageno
  209.    _wrap = .F.
  210.    _alignment = "LEFT"
  211.    EJECT PAGE
  212. RETURN
  213.  
  214. PROCEDURE Pg_head
  215.    * Imprimir cabecera de página y títulos de columnas
  216.    ?
  217.    IF _pageno <> 1
  218.       ?
  219.       ? MDY(DATE()) AT 0
  220.       ?? p_Grado AT (_rmargin - LEN(p_Grado))
  221.    ENDIF
  222.    ?
  223.    ?
  224.    DEFINE BOX FROM 0 TO 79 HEIGHT 4
  225.    ?   "Nombre/"         STYLE "B" AT 1
  226.    ??  "Título/"         STYLE "B" AT 30
  227.    ??  "Salario/"        STYLE "B" AT 48
  228.    ??  "Exper."          STYLE "B" AT 62
  229.    ??  "Grado"           STYLE "B" AT 73
  230.    ?   "Número empleado" STYLE "B" AT 1
  231.    ??  "Especialidad"    STYLE "B" AT 30
  232.    ??  "Comisión"        STYLE "B" AT 48
  233.    ?
  234. RETURN
  235.  
  236. PROCEDURE Reinit
  237.    * Reinicializar las variables de las sumas y cálculos del departamento
  238.    STORE 0 TO Salario_sum, number_emp, yrsexp_sum, yrsexp_avg
  239. RETURN
  240.  
  241. PROCEDURE Rpt_end
  242.    * Imprimir suma total al final del informe
  243.    ?
  244.    ?? "RESUMEN TOTAL:" STYLE "B" AT 27
  245.    ?? "  ₧" AT 42
  246.    ?? Salario_gt PICTURE "999,999,999"
  247. RETURN
  248.  
  249. PROCEDURE Grado
  250.    * Imprimir título del informe
  251.    ?
  252.    _wrap = .T.
  253.    _alignment = "CENTER"
  254.    ? "A-T INDUSTRIAS DEL MUEBLE"   STYLE "B"
  255.    ? "CENTRO INDUSTRIAL DEL ROBLE" STYLE "BU"
  256.    ?
  257.    ? "INFORME DE RECURSOS HUMANOS - REUNION TRIMESTRAL DE DIRECCION"
  258.    ?
  259.    ? MDY(DATE())
  260.    _wrap = .F.
  261.    _alignment = "LEFT"
  262. RETURN
  263. ********************************** FIN DE INF_EMP.PRG **********************************
  264.